In this document, we analyse missing data patterns in the dataset. The dataset has been obtained as described in the document “Download subsample of pollution data” (ie using europollution package and downloading data for a random sample of 10% of the stations, from 2013 to 2018). In a first step, we focus on one pollutant only, PM10. The present document is build so that it can be easily modified and recomputed for other pollutants or another sample.
Location of measurement stations
In order to assess by guesswork the representativity of the subsample drawn, we look at the location of the station selected:

The sample seems to cover most of Europe and should therefore be somehow representative. Note that the previous map does not represent the full set of stations. For readability reasons, we considered a zoomed version of the map. For more details, one can refer to the following interactive map.
We also consider the number of stations per country

Missing data patterns in the subsample
Here, we investigate whether missing PM10 concentration data varies across different dimentions.
Across countries
The overall share of missing value is 0.3781124.
We can break this down by countries.

One can notice that the share of missing values varies drastically across countries. This can be due to the quality of monitoring of air pollution stations. This variation might also come from our data wrangling. We need to check that.
Across dates

One may notice that the share of missing data slightly decreased over time. This might be due to improvement in air measurement capacity.
We look at whether this variation comes from some countries more than others.

We now investigate whether the share of missing data varies across month of the year.



Across time of the day
LS0tCnRpdGxlOiAiQW5hbHlzaXMgb2YgbWlzc2luZyBkYXRhIHBhdHRlcm5zIgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6IAogICAgdG9jOiBubwogICAgdGhlbWU6IHNpbXBsZXgKICAgIGhpZ2hsaWdodDogcHlnbWVudHMKICBodG1sX2RvY3VtZW50OgogICAgdGhlbWU6IHNpbXBsZXgKICAgIGhpZ2hsaWdodDogcHlnbWVudHMKYXV0aG9yOiAiVmluY2VudCBCYWdpbGV0LCBMw6lvIFphYnJvY2tpIgpkYXRlOiAiSnVseSAzMCwgMjAyMCIKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRSwgcmVzdWx0cz0naGlkZScsIHdhcm5pbmc9RkFMU0V9CmxpYnJhcnkoa25pdHIpCm9wdHNfY2h1bmskc2V0KGZpZy5wYXRoID0gImltYWdlcy8iLAogICAgICAgICAgICAgICBjYWNoZS5wYXRoID0gImNhY2hlLyIsCiAgICAgICAgICAgICAgIGNhY2hlID0gRkFMU0UsCiAgICAgICAgICAgICAgIGVjaG8gPSBUUlVFLAogICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UsCiAgICAgICAgICAgICAgIHdhcm5pbmcgPSBGQUxTRSkgIApgYGAgIAoKYGBge3IgaW5jbHVkZT1GQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZXVyb3BvbGx1dGlvbikKbGlicmFyeShtYXBzKQpsaWJyYXJ5KGx1YnJpZGF0ZSkKbGlicmFyeShsZWFmbGV0KQoKdGhlbWVfc2V0KHRoZW1lX21pbmltYWwoKSkKCmxvYWQoIi4uL091dHB1dHMvbWV0YWRhdGEuUmRhIikKbG9hZCgiLi4vT3V0cHV0cy9zdWJzYW1wbGVfc3RhdGlvbnNfaWRzLlJkYSIpCgp3cmFuZ2xlZF9tZXRhZGF0YSA8LSBtZXRhZGF0YSAlPiUgCiAgZXBfd3JhbmdsZV9tZXRhZGF0YSgpICU+JSAKICBtdXRhdGUoCiAgICBpbl9zdWJzYW1wbGUgPSAoc3RhdGlvbl9pZCAlaW4lIHN1YnNhbXBsZV9zdGF0aW9uc19pZHMpCiAgKSAlPiUgCiAgc2VsZWN0KC1vcGVuaW5nX3N0YXRpb24sIC1jbG9zaW5nX3N0YXRpb24sLW1lYXN1cmVtZW50X3R5cGUpICU+JSAjSSBuZWVkIHRvIHdpdGhkcmF3IHRoYXQgYW5kIGZpeCBpdCBpbiBldXJvcG9sbHV0aW9uCiAgZGlzdGluY3QoKSAKCmxvYWQoIi4uL091dHB1dHMvc3Vic2FtcGxlX1BNMTAuUmRhIikKCmRhdGEgPC0gc3Vic2FtcGxlX1BNMTAgJT4lIAogIGdyb3VwX2J5KHN0YXRpb25faWQsIHBvbGx1dGFudCkgJT4lIAogIG11dGF0ZSgKICAgIGNvbmNlbnRyYXRpb24gPSBpZmVsc2UobWludXRlKGxlYWQoZGF0ZSkpICE9IDAgJiBpcy5uYShjb25jZW50cmF0aW9uKSwgbGVhZChjb25jZW50cmF0aW9uKSwgY29uY2VudHJhdGlvbikKICApICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIGZpbHRlcihtaW51dGUoZGF0ZSkgPT0gMCkgJT4lICNJIG5lZWQgdG8gZml4IHRoaXMgaW4gZXVyb3BvbGx1dGlvbiAKICBsZWZ0X2pvaW4od3JhbmdsZWRfbWV0YWRhdGEsIGJ5ID0gYygic3RhdGlvbl9pZCIsICJjb3VudHJ5X2lzbyIsICJzYW1wbGluZ19wb2ludCIpKQoKcm0oc3Vic2FtcGxlX1BNMTApCmBgYAoKSW4gdGhpcyBkb2N1bWVudCwgd2UgYW5hbHlzZSBtaXNzaW5nIGRhdGEgcGF0dGVybnMgaW4gdGhlIGRhdGFzZXQuIFRoZSBkYXRhc2V0IGhhcyBiZWVuIG9idGFpbmVkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZG9jdW1lbnQgIkRvd25sb2FkIHN1YnNhbXBsZSBvZiBwb2xsdXRpb24gZGF0YSIgKCppZSogdXNpbmcgYGV1cm9wb2xsdXRpb25gIHBhY2thZ2UgYW5kIGRvd25sb2FkaW5nIGRhdGEgZm9yIGEgcmFuZG9tIHNhbXBsZSBvZiAxMCUgb2YgdGhlIHN0YXRpb25zLCBmcm9tIDIwMTMgdG8gMjAxOCkuIEluIGEgZmlyc3Qgc3RlcCwgd2UgZm9jdXMgb24gb25lIHBvbGx1dGFudCBvbmx5LCBQTTEwLiBUaGUgcHJlc2VudCBkb2N1bWVudCBpcyBidWlsZCBzbyB0aGF0IGl0IGNhbiBiZSBlYXNpbHkgbW9kaWZpZWQgYW5kIHJlY29tcHV0ZWQgZm9yIG90aGVyIHBvbGx1dGFudHMgb3IgYW5vdGhlciBzYW1wbGUuCgojIExvY2F0aW9uIG9mIG1lYXN1cmVtZW50IHN0YXRpb25zCgpJbiBvcmRlciB0byBhc3Nlc3MgYnkgZ3Vlc3N3b3JrIHRoZSByZXByZXNlbnRhdGl2aXR5IG9mIHRoZSBzdWJzYW1wbGUgZHJhd24sIHdlIGxvb2sgYXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBzdGF0aW9uIHNlbGVjdGVkOgoKYGBge3J9CgptYXBfcmFzdGVyIDwtIG1hcF9kYXRhKCJ3b3JsZCIpCgp3cmFuZ2xlZF9tZXRhZGF0YSAlPiUgCiAgZmlsdGVyKGxvbmdpdHVkZSA8IDQ3ICYgbG9uZ2l0dWRlID4gLTI1ICYgbGF0aXR1ZGUgPiAzNSAmIGxhdGl0dWRlIDwgNzEpICU+JSAKICBnZ3Bsb3QoKSArCiAgZ2VvbV9wb2ludChhZXMoeCA9IGxvbmdpdHVkZSwgeSA9IGxhdGl0dWRlLCBjb2xvciA9IGluX3N1YnNhbXBsZSksIHNpemUgPSAuMDUpICsKICAjIGdlb21fcG9seWdvbihkYXRhID0gbWFwX3Jhc3RlciwgCiAgIyAgICAgICAgICAgICAgICAgICAgICAgIGFlcyh4ID0gbG9uZywgeSA9IGxhdCwgZ3JvdXA9Z3JvdXApLCAKICAjICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAiZ3JleSIsIGZpbGwgPSBOQSkgKwogIGNvb3JkX21hcChwcm9qZWN0aW9uID0gImF6ZXF1aWRpc3RhbnQiKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJMb2NhdGlvbiBvZiBzdGF0aW9ucyBwcmVzZW50IGluIHRoZSByYW5kb20gc3Vic2FtcGxlIGNvbnNpZGVyZWQiLCB4ID0gIiIsIHkgPSAiIiwgY29sb3IgPSAiU3RhdGlvbiBpbiBzYW1wbGUiKSAKYGBgCgpUaGUgc2FtcGxlIHNlZW1zIHRvIGNvdmVyIG1vc3Qgb2YgRXVyb3BlIGFuZCBzaG91bGQgdGhlcmVmb3JlIGJlIHNvbWVob3cgcmVwcmVzZW50YXRpdmUuIE5vdGUgdGhhdCB0aGUgcHJldmlvdXMgbWFwIGRvZXMgbm90IHJlcHJlc2VudCB0aGUgZnVsbCBzZXQgb2Ygc3RhdGlvbnMuIEZvciByZWFkYWJpbGl0eSByZWFzb25zLCB3ZSBjb25zaWRlcmVkIGEgem9vbWVkIHZlcnNpb24gb2YgdGhlIG1hcC4gRm9yIG1vcmUgZGV0YWlscywgb25lIGNhbiByZWZlciB0byB0aGUgZm9sbG93aW5nIGludGVyYWN0aXZlIG1hcC4gCgpgYGB7cn0KcGFsIDwtIGNvbG9yRmFjdG9yKCJEYXJrMiIsIGRvbWFpbiA9IHdyYW5nbGVkX21ldGFkYXRhJGluX3N1YnNhbXBsZSkgCmNvbG9yX2luX3N1YnNhbXBsZSA8LSBwYWwod3JhbmdsZWRfbWV0YWRhdGEkaW5fc3Vic2FtcGxlKQpjb250ZW50IDwtIHBhc3RlKCJTdGF0aW9uIHR5cGU6Iiwgd3JhbmdsZWRfbWV0YWRhdGEkc3RhdGlvbl90eXBlLCAiPGJyLz4iLAogICAgICAgICAgICAgICAgICJTdGF0aW9uIGFyZWE6Iiwgd3JhbmdsZWRfbWV0YWRhdGEkc3RhdGlvbl9hcmVhLCAiPGJyLz4iKQoKIyB3cmFuZ2xlZF9tZXRhZGF0YSAlPiUgCiMgICBzZWxlY3Qoc3RhdGlvbl9pZCwgbG9uZ2l0dWRlLGxhdGl0dWRlLCBpbl9zdWJzYW1wbGUsIHN0YXRpb25fYXJlYSwgc3RhdGlvbl90eXBlKSAlPiUgCiMgICBkaXN0aW5jdCgpICU+JSAKIyAgIGxlYWZsZXQoKSAlPiUKIyAgIGFkZFRpbGVzKCkgJT4lICAgIAojICAgYWRkUHJvdmlkZXJUaWxlcygiRXNyaS5Xb3JsZEdyYXlDYW52YXMiKSAlPiUKIyAgIGFkZENpcmNsZXMoY29sID0gY29sb3JfaW5fc3Vic2FtcGxlLCBwb3B1cCA9IGNvbnRlbnQsIGxuZyA9IH5sb25naXR1ZGUsIGxhdCA9IH5sYXRpdHVkZSkgJT4lCiMgICBhZGRMZWdlbmQocGFsID0gcGFsLCB2YWx1ZXMgPSB+d3JhbmdsZWRfbWV0YWRhdGEkaW5fc3Vic2FtcGxlICwgdGl0bGUgPSAiU3RhdGlvbiBpbiBzYW1wbGUiKQpgYGAKCldlIGFsc28gY29uc2lkZXIgdGhlIG51bWJlciBvZiBzdGF0aW9ucyBwZXIgY291bnRyeQoKYGBge3J9Cm5iX3N0YXRpb25fY291bnRyeSA8LSB3cmFuZ2xlZF9tZXRhZGF0YSAlPiUgCiAgZ3JvdXBfYnkoY291bnRyeV9pc28pICU+JSAKICBzdW1tYXJpc2UoCiAgICBuYl9zdGF0aW9uX2NvdW50cnkgPSBuKCksCiAgICBwcm9wX2luX2NvdW50cnlfd2hvbGUgPSBuKCkvbnJvdyh3cmFuZ2xlZF9tZXRhZGF0YSksCiAgICBwcm9wX2luX2NvdW50cnlfc3Vic2FtcGxlID0gc3VtKGluX3N1YnNhbXBsZSkvc3VtKHdyYW5nbGVkX21ldGFkYXRhJGluX3N1YnNhbXBsZSkKICApCgpuYl9zdGF0aW9uX2NvdW50cnkgJT4lIAogIGthYmxlKGNvbC5uYW1lcyA9IGMoIkNvdW50cnkgSVNPIiwgIk51bWJlciBvZiBzdGF0aW9ucyBpbiBjb3VudHJ5IiwgIlByb3BvcnRpb24gb2Ygc3RhdGlvbnMgbG9jYXRlZCBpbiB0aGlzIGNvdW50cnkiLCAiUHJvcG9ydGlvbiBvZiBzdGF0aW9ucyBpbiB0aGUgc3Vic2FtcGxlIGxvY2F0ZWQgaW4gdGhpcyBjb3VudHJ5IikpCgpuYl9zdGF0aW9uX2NvdW50cnkgJT4lIAogIHBpdm90X2xvbmdlcihzdGFydHNfd2l0aCgicHJvcF9pbiIpLCBuYW1lc190byA9ICJpbl9zYW1wbGUiLCB2YWx1ZXNfdG8gPSAicHJvcCIpICU+JSAKICBtdXRhdGUoaW5fc2FtcGxlID0gc3RyX3N1Yihpbl9zYW1wbGUsIDE3LCBuY2hhcihpbl9zYW1wbGUpKSkgJT4lIAogIGdncGxvdCgpICsgCiAgZ2VvbV9wb2ludChhZXMoeCA9IGNvdW50cnlfaXNvLCB5ID0gcHJvcCwgY29sb3IgPSBpbl9zYW1wbGUpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJQcm9wb3J0aW9uIG9mIHN0YXRpb25zIGJ5IGNvdW50cnkgaW4gb3ZlcmFsbCBzYW1wbGUgYW5kIHN1YnNhbXBsZSIsIHggPSAiQ291bnRyeSIsIHkgPSAiUHJvcG9ydGlvbiBvZiBzdGF0aW9ucyIsIGNvbG9yID0gIlByb3BvcnRpb24gaW4iKSAKYGBgCgoKIyBNaXNzaW5nIGRhdGEgcGF0dGVybnMgaW4gdGhlIHN1YnNhbXBsZQoKSGVyZSwgd2UgaW52ZXN0aWdhdGUgd2hldGhlciBtaXNzaW5nIFBNMTAgY29uY2VudHJhdGlvbiBkYXRhIHZhcmllcyBhY3Jvc3MgZGlmZmVyZW50IGRpbWVudGlvbnMuCgojIyBBY3Jvc3MgY291bnRyaWVzCgpgYGB7ciBpbmNsdWRlID0gRkFMU0V9CnNoYXJlX21pc3NpbmcgPC0gIHN1bShpcy5uYShkYXRhJGNvbmNlbnRyYXRpb24pKS9ucm93KGRhdGEpCmBgYAoKVGhlIG92ZXJhbGwgc2hhcmUgb2YgbWlzc2luZyB2YWx1ZSBpcyBgciBzaGFyZV9taXNzaW5nYC4KCldlIGNhbiBicmVhayB0aGlzIGRvd24gYnkgY291bnRyaWVzLgoKYGBge3J9Cm1pc3Npbmdfc2hhcmVfY291bnRyeSA8LSBkYXRhICU+JSAKICBncm91cF9ieShjb3VudHJ5X2lzbykgJT4lIAogIHN1bW1hcmlzZShzaGFyZV9taXNzaW5nID0gc3VtKGlzLm5hKGNvbmNlbnRyYXRpb24pKS9uKCkpICU+JSAKICBhcnJhbmdlKHNoYXJlX21pc3NpbmcpCgptaXNzaW5nX3NoYXJlX2NvdW50cnkgJT4lIAogIGthYmxlKCkKCm1pc3Npbmdfc2hhcmVfY291bnRyeSAlPiUgCiAgZ2dwbG90KCkgKyAKICBnZW9tX3BvaW50KGFlcyh4ID0gcmVvcmRlcihjb3VudHJ5X2lzbywgc2hhcmVfbWlzc2luZyksIHkgPSBzaGFyZV9taXNzaW5nKSwgY29sb3IgPSAiZGFya0JsdWUiKSArIAogIGxhYnModGl0bGUgPSAiU2hhcmUgb2YgbWlzc2luZyBQTTEwIGNvbmNlbnRyYXRpb24gZGF0YSBieSBjb3VudHJ5IiwgeCA9ICJDb3VudHJ5IiwgeSA9ICJTaGFyZSBvZiBtaXNzaW5nIFBNMTAgY29uY2VudHJhdGlvbiBkYXRhIikgCmBgYAoKT25lIGNhbiBub3RpY2UgdGhhdCB0aGUgc2hhcmUgb2YgbWlzc2luZyB2YWx1ZXMgdmFyaWVzIGRyYXN0aWNhbGx5IGFjcm9zcyBjb3VudHJpZXMuIFRoaXMgY2FuIGJlIGR1ZSB0byB0aGUgcXVhbGl0eSBvZiBtb25pdG9yaW5nIG9mIGFpciBwb2xsdXRpb24gc3RhdGlvbnMuIFRoaXMgdmFyaWF0aW9uIG1pZ2h0IGFsc28gY29tZSBmcm9tIG91ciBkYXRhIHdyYW5nbGluZy4gV2UgbmVlZCB0byBjaGVjayB0aGF0LgoKIyMgQWNyb3NzIGRhdGVzCgpgYGB7cn0KZGF0YSAlPiUgCiAgZmlsdGVyKHllYXIoZGF0ZSkgPiAyMDEyKSAlPiUgI0kgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aHkgSSBoYXZlIGRhdGEgZm9yIDIwMTIKICBtdXRhdGUoZ3JvdXBpbmdfdmFyID0geWVhcihkYXRlKSkgJT4lIAogIGdyb3VwX2J5KGdyb3VwaW5nX3ZhcikgJT4lIAogIHN1bW1hcmlzZShzaGFyZV9taXNzaW5nID0gc3VtKGlzLm5hKGNvbmNlbnRyYXRpb24pKS9uKCkpICU+JSAKICBhcnJhbmdlKHNoYXJlX21pc3NpbmcpICU+JSAKICBnZ3Bsb3QoKSArIAogIGdlb21fcG9pbnQoYWVzKHggPSBncm91cGluZ192YXIsIHkgPSBzaGFyZV9taXNzaW5nKSwgY29sb3IgPSAiZGFya0JsdWUiKSArIAogIGxhYnModGl0bGUgPSAiU2hhcmUgb2YgbWlzc2luZyBQTTEwIGNvbmNlbnRyYXRpb24gZGF0YSBieSB5ZWFyIiwgeCA9ICJZZWFyIiwgeSA9ICJTaGFyZSBvZiBtaXNzaW5nIFBNMTAgY29uY2VudHJhdGlvbiBkYXRhIikgKwogIHlsaW0oMCwgMSkKYGBgCgpPbmUgbWF5IG5vdGljZSB0aGF0IHRoZSBzaGFyZSBvZiBtaXNzaW5nIGRhdGEgc2xpZ2h0bHkgZGVjcmVhc2VkIG92ZXIgdGltZS4gVGhpcyBtaWdodCBiZSBkdWUgdG8gaW1wcm92ZW1lbnQgaW4gYWlyIG1lYXN1cmVtZW50IGNhcGFjaXR5LgoKV2UgbG9vayBhdCB3aGV0aGVyIHRoaXMgdmFyaWF0aW9uIGNvbWVzIGZyb20gc29tZSBjb3VudHJpZXMgbW9yZSB0aGFuIG90aGVycy4KCmBgYHtyfQpkYXRhICU+JSAKICBtdXRhdGUoeWVhciA9IHllYXIoZGF0ZSkpICU+JSAKICBmaWx0ZXIoeWVhciA+IDIwMTIpICU+JSAjSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoeSBJIGhhdmUgZGF0YSBmb3IgMjAxMgogIGdyb3VwX2J5KGNvdW50cnlfaXNvLCB5ZWFyKSAlPiUgCiAgc3VtbWFyaXNlKHNoYXJlX21pc3NpbmcgPSBzdW0oaXMubmEoY29uY2VudHJhdGlvbikpL24oKSkgJT4lIAogIGFycmFuZ2Uoc2hhcmVfbWlzc2luZykgJT4lIAogIGdncGxvdCgpICsgCiAgZ2VvbV9wb2ludChhZXMoeCA9IGNvdW50cnlfaXNvLCB5ID0gc2hhcmVfbWlzc2luZywgY29sb3IgPSBmYWN0b3IoeWVhcikpKSArIAogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlNwZWN0cmFsIikgKwogIGxhYnModGl0bGUgPSAiU2hhcmUgb2YgbWlzc2luZyBQTTEwIGNvbmNlbnRyYXRpb24gZGF0YSBieSBjb3VudHJ5IiwgeCA9ICJDb3VudHJ5IiwgeSA9ICAiU2hhcmUgb2YgbWlzc2luZyBQTTEwIGNvbmNlbnRyYXRpb24gZGF0YSIpICsKICB5bGltKDAsIDEpCmBgYAoKV2Ugbm93IGludmVzdGlnYXRlIHdoZXRoZXIgdGhlIHNoYXJlIG9mIG1pc3NpbmcgZGF0YSB2YXJpZXMgYWNyb3NzIG1vbnRoIG9mIHRoZSB5ZWFyLgoKYGBge3J9CmRhdGEgJT4lIAogIGZpbHRlcih5ZWFyKGRhdGUpID4gMjAxMikgJT4lICNJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2h5IEkgaGF2ZSBkYXRhIGZvciAyMDEyCiAgbXV0YXRlKGdyb3VwaW5nX3ZhciA9IG1vbnRoKGRhdGUpKSAlPiUgCiAgZ3JvdXBfYnkoZ3JvdXBpbmdfdmFyKSAlPiUgCiAgc3VtbWFyaXNlKHNoYXJlX21pc3NpbmcgPSBzdW0oaXMubmEoY29uY2VudHJhdGlvbikpL24oKSkgJT4lIAogIGFycmFuZ2Uoc2hhcmVfbWlzc2luZykgJT4lIAogIGdncGxvdCgpICsgCiAgZ2VvbV9wb2ludChhZXMoeCA9IGdyb3VwaW5nX3ZhciwgeSA9IHNoYXJlX21pc3NpbmcpLCBjb2xvciA9ICJkYXJrQmx1ZSIpICsgCiAgbGFicyh0aXRsZSA9ICJTaGFyZSBvZiBtaXNzaW5nIFBNMTAgY29uY2VudHJhdGlvbiBkYXRhIGJ5IG1vbnRoIiwgeCA9ICJNb250aCIsIHkgPSAiU2hhcmUgb2YgbWlzc2luZyBQTTEwIGNvbmNlbnRyYXRpb24gZGF0YSIpICsKICB5bGltKDAsIDEpCmBgYAoKYGBge3J9CmRhdGEgJT4lIAogIGZpbHRlcih5ZWFyKGRhdGUpID4gMjAxMikgJT4lICNJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2h5IEkgaGF2ZSBkYXRhIGZvciAyMDEyCiAgbXV0YXRlKGdyb3VwaW5nX3ZhciA9IGRheShkYXRlKSkgJT4lIAogIGdyb3VwX2J5KGdyb3VwaW5nX3ZhcikgJT4lIAogIHN1bW1hcmlzZShzaGFyZV9taXNzaW5nID0gc3VtKGlzLm5hKGNvbmNlbnRyYXRpb24pKS9uKCkpICU+JSAKICBhcnJhbmdlKHNoYXJlX21pc3NpbmcpICU+JSAKICBnZ3Bsb3QoKSArIAogIGdlb21fcG9pbnQoYWVzKHggPSBncm91cGluZ192YXIsIHkgPSBzaGFyZV9taXNzaW5nKSwgY29sb3IgPSAiZGFya0JsdWUiKSArIAogIGxhYnModGl0bGUgPSAiU2hhcmUgb2YgbWlzc2luZyBQTTEwIGNvbmNlbnRyYXRpb24gZGF0YSBieSBkYXkgb2YgdGhlIG1vbnRoIiwgeD0gIkRheSBvZiB0aGUgbW9udGgiLCB5ID0gIlNoYXJlIG9mIG1pc3NpbmcgUE0xMCBjb25jZW50cmF0aW9uIGRhdGEiKSArCiAgeWxpbSgwLCAxKQpgYGAKCgpgYGB7cn0KZGF0YSAlPiUgCiAgZmlsdGVyKHllYXIoZGF0ZSkgPiAyMDEyKSAlPiUgI0kgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aHkgSSBoYXZlIGRhdGEgZm9yIDIwMTIKICBtdXRhdGUoZ3JvdXBpbmdfdmFyID0gd2RheShkYXRlKSkgJT4lIAogIGdyb3VwX2J5KGdyb3VwaW5nX3ZhcikgJT4lIAogIHN1bW1hcmlzZShzaGFyZV9taXNzaW5nID0gc3VtKGlzLm5hKGNvbmNlbnRyYXRpb24pKS9uKCkpICU+JSAKICBhcnJhbmdlKHNoYXJlX21pc3NpbmcpICU+JSAKICBnZ3Bsb3QoKSArIAogIGdlb21fcG9pbnQoYWVzKHggPSBncm91cGluZ192YXIsIHkgPSBzaGFyZV9taXNzaW5nKSwgY29sb3IgPSAiZGFya0JsdWUiKSArIAogIGxhYnModGl0bGUgPSAiU2hhcmUgb2YgbWlzc2luZyBQTTEwIGNvbmNlbnRyYXRpb24gZGF0YSBieSBkYXkgb2YgdGhlIG1vbnRoIiwgeCA9ICJEYXkgb2YgdGhlIHdlZWsiLCB5ID0gIlNoYXJlIG9mIG1pc3NpbmcgUE0xMCBjb25jZW50cmF0aW9uIGRhdGEiKSArCiAgeWxpbSgwLCAxKQpgYGAKCgojIyBBY3Jvc3MgdGltZSBvZiB0aGUgZGF5CgoKCgoKCgo=